266. Promtail 擷取docker log
WHY
之前是用filebeat將log丟到EFK裡面244. 在GCE使用filebeat傳到GKE的ECK
最近有些案子開始改用loki了,
所以GCE這邊也要跟著改一下。
Solution
專案越來越多,
也開始思考要不要那麼多grafana了。
所以loki統一丟到同一台上面,
雖然說Loki對於全文檢索不太適合,
但如果是針對時間戳記的話是還蠻好用的。
Docker-compose.yaml
version: '3.8'
services:
promtail:
image: grafana/promtail:3.2.1
container_name: promtail
command: --config.file=/mnt/config/promtail-config.yaml
volumes:
- ./promtail.yaml:/mnt/config/promtail-config.yaml
- /var/lib/docker/containers:/var/lib/docker/containers
networks:
- zlm_network
networks:
zlm_network:
driver: bridge
name: zlm_network
簡單掛載promtail,雖然官方文章也有提到使用docker driver 。
但有點懶得再弄其他套了。
promtail.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
clients:
- url: http://10.60.16.12:3100/loki/api/v1/push
positions:
filename: /tmp/positions.yaml
target_config:
sync_period: 10s
scrape_configs:
- job_name: container_scrape # Job Name
pipeline_stages:
- docker: {}
- static_labels:
project: "gr-video-qa"
docker_sd_configs: # 使用 Docker Service Discovery
- host: unix:///var/run/docker.sock # Docker Socket 的位置
refresh_interval: 5s # 每 5 秒重新掃描一次 Docker Socket
relabel_configs: # 將 Docker 相關的資訊轉換成 Label
- source_labels: ['__meta_docker_container_name'] # 將 __meta_docker_container_name 轉為新的名為 container 的 Label
regex: '/(.*)' # 使用正規表達式取出 Container Name
target_label: 'container'
- source_labels: ['__meta_docker_container_log_stream'] # 將 __meta_docker_container_log_stream 轉為新的名為 logstream 的 Label
target_label: 'logstream'
promtail的設定檔,
其他部分,參考Promtail — Loki 御用 Log 收集器